package com.copa.l209;

/**
 * @author copa
 * @createDate 2022-05-26 11:01
 * @function 暴力法 由于我没审题...所以导致我还以为题目出错了o(╥﹏╥)o
 */
public class Test1 {

    /**
     * 以下就是我自己做的，真正的双重暴力...
     * @param target
     * @param nums
     * @return
     */
    public int minSubArrayLen(int target, int[] nums) {
        // 结果
        int result = Integer.MAX_VALUE;
        // 临时长度
        int tempSize;
        // 临时总数
        int temp;
        // i作为起始点
        for (int i = 0; i < nums.length; i++) {
            temp = 0;
            tempSize = 0;
            if (nums[i] >= target) {
                // 若遍历的i元素已经符合了，则直接返回，无需多余遍历
                return 1;
            }
            // 否则得先增加对应的记录
            temp += nums[i];
            tempSize++;
            for (int j = i + 1; j < nums.length; j++) {
                // j是终止点
                if (nums[j] + temp >= target) {
                    // 若遍历的[i,j]元素范围内已经符合了，则直接退出二层循环，无需多余遍历
                    tempSize++;
                    // 并且记录下result值，若元素最小取最小
                    result = Math.min(tempSize, result);
                    break;
                }
                // 否则继续遍历
                tempSize++;
                temp += nums[j];
            }
        }
        // 如果 = 最大值，证明是没有遍历出来的，所以为0
        return result == Integer.MAX_VALUE ? 0 : result;
    }

    /**
     * 这个我是参考别人的做法，虽然在leetcode是超时的，但我也解释一下思想吧
     * @param target
     * @param nums
     * @return
     */
    public int minSubArrayLen2(int target, int[] nums) {
        int size = 0;
        // 这个我在title.txt说明
        while (size <= nums.length) {
            size++;
            for (int i = 0; i < nums.length - size + 1; i++) {
                int total = 0;
                for (int j = i; j < i + size; j++) {
                    total += nums[j];
                }
                if (total >= target) {
                    return size;
                }
            }
        }
        return 0;
    }



//    private Integer listSum(ArrayList<Integer> list, int[] nums) {
//        // sum
//        return list.stream().mapToInt(index -> nums[index]).sum();
//    }

//    private Long listEqualFlag(ArrayList<Integer> list, int index) {
//        // equal
//        return list.stream().filter(num -> Objects.equals(index, num)).count();
//    }

    public static void main(String[] args) {
        int[] nums = new int[]{2,3,1,2,4,3};
        //int[] nums = new int[]{1,1,1,1,1,1,1,1};
        int result = new Test1().minSubArrayLen(7, nums);
        System.out.println(result);
    }
}
